//正则表达式（regex），它是专门在编程语言中设计，
//用于定义字符串内容模版的一种表达式

// 语法：
// 1.任何一个正则表达式本质上就是一个字符串
// 2.普通字符串是'',正则表达式以/^开始，$/结束；在里面填上内容；
//   /^内容$/  /内容/
// 3.它有一个test()的方法可以测试字符串满不满足正则，满足返回true，不满足返回false
// 4.如果正则表达式的内容是一个普通字符串，则只能匹配跟这个字符串一模一样的内容
// 5.学习正则的关键就是学习模糊匹配的符号




let reg1 = /^abc$/;
// let reg1=/黄鑫宇/;
console.log(reg1.test('fsdgbd黄鑫abc宇dcsdvgdf'));
//'bca'
//-----1.[]  代表一个位置的字符，里面填写允许这个位置出现的字符
//支持范围书写  如：a-z  A-Z  0-9
//简写
//  \d  数字 等同于[0-9]
//  \D  非数字
//  \s  空白字符
//  \S  非空白字符
//  \w  数字、字母、下划线，等同于[a-zA-Z0-9_]
//  \W  非数字、字母、下划线
//   ^  取反 [^3-6] 匹配3-6以外的数字
let reg2 = /^\D[A-Z][3-6]\s$/;
console.log(reg2.test(',A62'));
// 常用的范围匹配
//16进制： [0-9a-fA-F]  #ffffff #000000

// 练习：写一个正则匹配邮编
// let reg=/^\d\d\d\d\d\d$/;
// console.log(reg.test('610000'));

//----- 2.{} 代表出现的次数，它前面的这个表达式可以出现的次数
//{n,m}  代表最少出现n次，最多出现m次
//{n} 只能出现n次
//{n,}  代表表达式至少出现n次，最多不限
//注意 没有{,m}  
// 特例简写：
// 1. ?  代表0-1次
// 2. +  代表1-任意次
// 3. *  代表0-任意次
let reg3 = /^[0-9]{6,10}$/;
console.log(reg3.test('12345678901'));
let reg4 = /^[0-9]{6}$/;
console.log(reg4.test('1234567'));
let reg5 = /^[a-f]{3}abc{1,3}$/;
console.log(reg5.test('aaaabc'));
console.log(reg5.test('abcac'));
console.log(/^[0-9]?ab+c$/.test('3abbbc'));

//----- 3.() 代表分组  (分组1｜分组2｜分组3)
console.log(/^ab{2}$/.test('abab'));
console.log(/^(ab){2,5}$/.test('ababab'));
console.log(/^([0-9]|ab){3}[0-9]{3}$/.test('ababab333'));

// 练习：1.身份证 15或者18位的数字
let reg6 = /^\d{15}(\d{3})?$/;
console.log(reg6.test('123456789009876111'));

//2.身份证 15或者18位的数字,最后一位可能是x
let reg7 = /^\d{15}((\d{3})|(\d){2}x)?$/;
console.log(reg7.test('1111111111111111x'));


let str = 'weasabcdfguiyabcoifyubkjb';
let reg = /abc/g;
console.log(str.replace(reg, 'A'));
// console.log(reg.test(str));

let arr = ['杀人', '死亡', '色情', '黄色'];

let str1 = 'xdjs杀人杀人kgcfj死亡dhsjhah色情ahakj黄色dshfks';
//****
//xdjs****kgcfj****dhsjhah****ahakj****dshfks
let str2 = arr.join('|');
let reg9 = new RegExp(`(${str2})+`, 'g')
console.log(str1.replace(reg9, '****'));

